package com.embrion.controller;

import java.io.IOException;




import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.embrion.bean.Professore;
import com.embrion.db.DataHandler;
import com.embrion.utils.Const;
import com.embrion.utils.Misc;


public class Login extends HttpServlet {

	
	private static final long serialVersionUID = -2220872621470189292L;
	private static ServletConfig config = null;
	private static DataHandler dh = null;

	public void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		String action = req.getParameter(Const.actionParameter);
		String returnPage = null;
		HttpSession session = req.getSession();

		if ((action != null) && (action.equalsIgnoreCase(Const.loginAction))) {
			logout(req, res);
			returnPage = login(req, res);
		}

		else if ((action != null)
				&& (action.equalsIgnoreCase(Const.logoutAction))) {
			logout(req, res);
			returnPage = Const.loginPage;

		}

		else {

			Professore p = (Professore) session.getAttribute(Const.professoreAttr);

			if (p != null) {

				// TODO:  DA osservare returnPage = Const.homePage;
				returnPage = "/Controller";

			} else {

				returnPage = Const.loginPage;

			}
		} 

		Misc.gotoPage(returnPage, req, res, Login.config.getServletContext());
	}

	private String login(HttpServletRequest req, HttpServletResponse res) {

		String retPage = null;

		String un = req.getParameter(Const.usernameParameter);
		String pw = req.getParameter(Const.passwordParameter);
		HttpSession session = req.getSession();

		if ((!un .equalsIgnoreCase("")) && (!pw .equalsIgnoreCase(""))) {
			// String encPw = Crypto.encode( pw );
			Professore p = dh.getUser(un, pw);

			if (p != null) {

				session.setAttribute(Const.professoreAttr, p);
//				Integer totale_documenti_scansiti = dh.getTotaleDocumentiScansiti();
//				Integer totale_documenti_allineati = dh.getTotaleDocumentiAllineati();
//				Integer totale_documenti_da_allineare = totale_documenti_scansiti - totale_documenti_allineati;
//				
//				req.setAttribute(Const.totale_documenti_scansiti, totale_documenti_scansiti);
//				req.setAttribute(Const.totale_documenti_allineati, totale_documenti_allineati);
//				req.setAttribute(Const.totale_documenti_da_allineare, totale_documenti_da_allineare);
//				retPage = Const.homePage;
				retPage = "/Controller";
				
			} else {

				req.setAttribute(Const.messaggio, Const.messaggioErroreLogin);
				retPage = Const.loginPage;

			}
		} else {

			req.setAttribute(Const.messaggio, Const.messaggioCompilaTuttiICampi);
			retPage = Const.loginPage;

		}

		return retPage;
	}

	private void logout(HttpServletRequest req, HttpServletResponse res) {
		HttpSession session = req.getSession();

		Misc.flushSession(session);
	}

	public void init(ServletConfig _config) throws ServletException {
		if (Const.homePath == null) {
			Const.homePath = _config.getServletContext().getRealPath("/");
		}
		Login.dh = new DataHandler();
		Login.config = _config;
		super.init(_config);
	}

	public void destroy() {
		if (Login.dh != null) {
			Login.dh.destroy();
			Login.dh = null;
		}
		super.destroy();
	}
}
